package com.qf.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class ProducerMain {
    public static void main(String[] args) throws IOException, TimeoutException {
        //①创建一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置rabbitmq所在机器ip
        factory.setHost("localhost");
        //设置rabbitmq所在机器的程序端口号
        factory.setPort(5672);
        //设置用户名
        factory.setUsername("guest");
        //设置密码
        factory.setPassword("guest");
        //设置虚拟主机
        factory.setVirtualHost("cdm1");

        //② 利用连接工厂创建连接对象
        Connection conn = factory.newConnection();
        //③ 基于connection获取对应的channel通道对象
        Channel channel = conn.createChannel();

        //④ 将数据发送到交换机--->队列
        /*
            声明一个队列
                p1: 队列的名字
                p2: 是否是持久化队列
                p3: 该队列是否是当前连接独占（true,那么其他连接无法访问这个队列）
                p4: 该队列的数据是否在该连接断开后，自动删除（true,那么当前连接断开后，队列会自动删除）
                p5: 额外参数（比如消息超时时间、队列长度、死信交换机的设置等等）
         */
        channel.queueDeclare("cdm.simple",true,false,false,null);

        /*
            发送数据
                p1: 指定交换机的名字。简单模式，留空（不能是null，""）
                p2: 路由键的名字。简单模式，写的是队列的名字
                p3: 是否强制。在发送端进行消息确认时需要用到的一个参数
                p4：立即的。消息是否立即发送
                p5：基本属性对象。设置消息的唯一表示（消息id）、消息的超时时间。。。。
                p6: 消息数据
         */

        for (int i = 0; i < 10; i++) {
            channel.basicPublish("","cdm.simple",null,("hello rabbitmq" + i).getBytes(StandardCharsets.UTF_8));
        }

        //⑤ 释放资源
        channel.close();
        conn.close();
    }
}
